package co.yixiang.tools.utils;

import co.yixiang.tools.domain.AliossConfig;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.BucketInfo;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.List;

public class AliOSSUtil {
    /**
     * 上传文件
     * @param aliOSSConfig
     *  Host 默认http://oss-cn-hangzhou.aliyuncs.com
     *  accessKeyId 默认LTAI4FuzJP7eu3Gj2hZnoSA3
     *  accessKeySecret 默认qCgKxCxGRPYImJbTFrXPa02i7Lerlr
     *  bucketName 默认yiknetdemo
     * @param fileKey 文件名称
     * @param file 文件
     * @return
     */
    public static Boolean addFile(AliossConfig aliOSSConfig, String fileKey, MultipartFile file){
        Boolean res=false;

        // 生成OSSClient，您可以指定一些参数，详见“SDK手册 > Java-SDK > 初始化”，
        // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
        OSS ossClient = new OSSClientBuilder().build(aliOSSConfig.getHost(), aliOSSConfig.getAccessKey(), aliOSSConfig.getSecretKey());

        try {
            // 判断Bucket是否存在。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
            // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            if (ossClient.doesBucketExist(aliOSSConfig.getBucket())) {
                System.out.println("您已经创建Bucket：" + aliOSSConfig.getBucket() + "。");
            } else {
                System.out.println("您的Bucket不存在，创建Bucket：" + aliOSSConfig.getBucket() + "。");
                // 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
                // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
                ossClient.createBucket(aliOSSConfig.getBucket());
            }
            // 文件存储入OSS，Object的名称为fileKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
            // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
            //转成本地文件
            File file1=MultipartFileToFile.multipartFileToFile(file);
            //上传
            ossClient.putObject(aliOSSConfig.getBucket(), fileKey,file1 );
            //删除本地文件
            MultipartFileToFile.delteTempFile(file1);
            System.out.println("Object：" + fileKey + "存入OSS成功。");
            res=true;
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }

        return res;
    }

    /**
     * 删除文件
     * @param aliOSSConfig
     * @param fileKey 文件名称
     * @return
     */
    public static Boolean dellFile(AliossConfig aliOSSConfig,String fileKey){
        Boolean res=false;

        // 生成OSSClient，您可以指定一些参数，详见“SDK手册 > Java-SDK > 初始化”，
        // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
        OSS ossClient = new OSSClientBuilder().build(aliOSSConfig.getHost(), aliOSSConfig.getAccessKey(), aliOSSConfig.getSecretKey());

        try {
            // 判断Bucket是否存在。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
            // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
            if (ossClient.doesBucketExist(aliOSSConfig.getBucket())) {
                System.out.println("您已经创建Bucket：" + aliOSSConfig.getBucket() + "。");
            } else {
                System.out.println("您的Bucket不存在，创建Bucket：" + aliOSSConfig.getBucket() + "。");
                // 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
                // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
                ossClient.createBucket(aliOSSConfig.getBucket());
            }

            // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
            // 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
            ossClient.deleteObject(aliOSSConfig.getBucket(), fileKey);
            System.out.println("删除Object：" + fileKey + "成功。");
            res=true;
        } catch (OSSException oe) {
            oe.printStackTrace();
        } catch (ClientException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
        }
        return res;
    }

}
